/**
 * 当一门编程语言的函数可以被当作变量一样用时，则称这门语言拥有头等函数。
 *   例如，在这门语言中，函数可以被当作参数传递给其他函数，
 *   可以作为另一个函数的返回值，还可以被赋值给一个变量。
 */

{ // Assigning a function to a variable

    const hi = () => {  // We assigned an Arrow Function to a Variable `hi`
        console.log('Hello World!');
    };

    hi()

    let fun = hi;
    fun()
}

{ // Passing a function as an argument
    function sayHello() {
        return "Hello, ";
    }

    function greeting(helloMessage, name) {
        console.log(helloMessage() + name);
    }

    // Pass `sayHello` as an argument to greeting function
    greeting(sayHello, "JavaScript!");  // => Hello, JavaScript!
}

{ // Returning a function
    function sayHello() {
        return () => {
            console.log("Hello!");
        };
    }
}
